{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import scipy \n",
    "import random\n",
    "import math\n",
    "import csv\n",
    "from scipy.stats import poisson \n",
    "from scipy.integrate import quad\n",
    "import sklearn.metrics.pairwise as sk"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Set the parameters and import the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "N_all = 200\n",
    "n_tasks = 4\n",
    "n_latent = 2\n",
    "n_missing_values = 50\n",
    "n_folds = 1\n",
    "epochs = 500\n",
    "plot_interpolation = \"None\"\n",
    "missing_experiment = True\n",
    "folder = '../Data/synthetic_experiments/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Data\n",
    "outputs_txt = np.loadtxt('../Data/synthetic_experiments/outputs')\n",
    "inputs = np.loadtxt('../Data/synthetic_experiments/inputs')\n",
    "intensities = np.transpose(np.loadtxt('../Data/synthetic_experiments/sample_intensity')) \n",
    "weights_data_task_noisy = np.load('../Data/synthetic_experiments/weights_data_task_noisy.npy')\n",
    "process_values_noisy = np.load('../Data/synthetic_experiments/process_values_noisy.npy')\n",
    "offset_data_noisy = np.load('../Data/synthetic_experiments/offset_data_noisy.npy')\n",
    "\n",
    "nelbo_values = np.load('../Data/synthetic_experiments/nelbo_values_Normal_LGCP_False10.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "outputs_noMissing = np.load('../Data/synthetic_experiments/outputs_noMissing.npy')\n",
    "outputs = np.load('../Data/synthetic_experiments/outputs.npy')\n",
    "inputs = np.load('../Data/synthetic_experiments/inputs.npy')\n",
    "intensities = np.transpose(np.load('../Data/synthetic_experiments/sample_intensity.npy'))[0] + 15\n",
    "original_inputs = np.load('../Data/synthetic_experiments/original_inputs_synthetic.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "random_noise_vector = np.load('../Data/synthetic_experiments/random_noise_vector.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Results for ST\n",
    "final_dataset_ST_Normal = np.load(folder + 'final_dataset_Normal_LGCP_'+ str(missing_experiment)+'.npy')[0]\n",
    "latent_means_ST_Normal = np.load(folder + 'latent_means_Normal_LGCP_'+str(missing_experiment)+'.npy')[0]\n",
    "latent_vars_ST_Normal = np.load(folder + 'latent_variances_Normal_LGCP_'+str(missing_experiment)+'.npy')[0]\n",
    "means_w_ST_Normal = np.load(folder + 'means_weights_Normal_LGCP_'+str(missing_experiment)+'.npy')[0]\n",
    "vars_w_ST_Normal = np.load(folder + 'covars_weights_Normal_LGCP_'+str(missing_experiment)+'.npy')[0]\n",
    "offsets_ST_Normal = np.load(folder + 'offsets_Normal_LGCP_'+str(missing_experiment)+'.npy')[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Results for MT Normal\n",
    "final_dataset_MT_Normal = np.load(folder + 'final_dataset_Normal_MCPM_'+ str(missing_experiment)+'.npy')[0]\n",
    "latent_means_MT_Normal = np.load(folder + 'latent_means_Normal_MCPM_'+str(missing_experiment)+'.npy')\n",
    "latent_vars_MT_Normal = np.load(folder + 'latent_variances_Normal_MCPM_'+str(missing_experiment)+'.npy')\n",
    "means_w_MT_Normal = np.load(folder + 'means_weights_Normal_MCPM_'+str(missing_experiment)+'.npy')\n",
    "vars_w_MT_Normal = np.load(folder + 'covars_weights_Normal_MCPM_'+str(missing_experiment)+'.npy')\n",
    "offsets_MT_Normal = np.load(folder + 'offsets_Normal_MCPM_'+str(missing_experiment)+'.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "ename": "FileNotFoundError",
     "evalue": "[Errno 2] No such file or directory: '../Data/synthetic_experiments/final_dataset_GP_MCPM_True.npy'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-8-86c96be9eea9>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m# Results for MT GP\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mfinal_dataset_MT_GP\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfolder\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'final_dataset_GP_MCPM_'\u001b[0m\u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmissing_experiment\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m'.npy'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0mlatent_means_MT_GP\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfolder\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'latent_means_GP_MCPM_'\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmissing_experiment\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m'.npy'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mlatent_vars_MT_GP\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfolder\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'latent_variances_GP_MCPM_'\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmissing_experiment\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m'.npy'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mmeans_w_MT_GP\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfolder\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'means_weights_GP_MCPM_'\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmissing_experiment\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m'.npy'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/numpy/lib/npyio.py\u001b[0m in \u001b[0;36mload\u001b[0;34m(file, mmap_mode, allow_pickle, fix_imports, encoding)\u001b[0m\n\u001b[1;32m    413\u001b[0m         \u001b[0mown_fid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    414\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 415\u001b[0;31m         \u001b[0mfid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mos_fspath\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"rb\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    416\u001b[0m         \u001b[0mown_fid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    417\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '../Data/synthetic_experiments/final_dataset_GP_MCPM_True.npy'"
     ]
    }
   ],
   "source": [
    "# Results for MT GP\n",
    "final_dataset_MT_GP = np.load(folder + 'final_dataset_GP_MCPM_'+ str(missing_experiment)+'.npy')[0]\n",
    "latent_means_MT_GP = np.load(folder + 'latent_means_GP_MCPM_'+str(missing_experiment)+'.npy')\n",
    "latent_vars_MT_GP = np.load(folder + 'latent_variances_GP_MCPM_'+str(missing_experiment)+'.npy')\n",
    "means_w_MT_GP = np.load(folder + 'means_weights_GP_MCPM_'+str(missing_experiment)+'.npy')\n",
    "vars_w_MT_GP = np.load(folder + 'covars_weights_GP_MCPM_'+str(missing_experiment)+'.npy')\n",
    "offsets_MT_GP = np.load(folder + 'offsets_GP_MCPM_'+str(missing_experiment)+'.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Results for ICM\n",
    "mu_0 = np.loadtxt('../Data/synthetic_experiments/mu_0')\n",
    "mu_1 = np.loadtxt('../Data/synthetic_experiments/mu_1')\n",
    "mu_2 = np.loadtxt('../Data/synthetic_experiments/mu_2')\n",
    "mu_3 = np.loadtxt('../Data/synthetic_experiments/mu_3')\n",
    "var_0 = np.loadtxt('../Data/synthetic_experiments/var_0')\n",
    "var_1 = np.loadtxt('../Data/synthetic_experiments/var_1')\n",
    "var_2 = np.loadtxt('../Data/synthetic_experiments/var_2')\n",
    "var_3 = np.loadtxt('../Data/synthetic_experiments/var_3')\n",
    "mu = np.zeros((200,4))\n",
    "mu[:,0] = mu_0\n",
    "mu[:,1] = mu_1\n",
    "mu[:,2] = mu_2\n",
    "mu[:,3] = mu_3\n",
    "var = np.zeros((200,4))\n",
    "var[:,0] = var_0\n",
    "var[:,1] = var_1\n",
    "var[:,2] = var_2\n",
    "var[:,3] = var_3\n",
    "posterior_mean = np.exp(mu + 0.5*var)\n",
    "posterior_var = (np.exp(var) - 1.)*np.exp(2.0*mu + var)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Get the predictions for each method and prior specification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'final_dataset_MT_GP' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-10-d3a8c7de5385>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0mpredictions_MT_Normal\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfinal_dataset_MT_Normal\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m9\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mpredictions_ST_Normal\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfinal_dataset_ST_Normal\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m9\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mpredictions_MT_GP\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfinal_dataset_MT_GP\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m9\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'final_dataset_MT_GP' is not defined"
     ]
    }
   ],
   "source": [
    "predictions_MT_Normal = final_dataset_MT_Normal[:,5:9]\n",
    "predictions_ST_Normal = final_dataset_ST_Normal[:,5:9]\n",
    "predictions_MT_GP = final_dataset_MT_GP[:,5:9]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the indeces of missing values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "index1 = range(10,60)\n",
    "index1_non_missing1 = range(0,10)\n",
    "index1_non_missing2 = range(60,200)\n",
    "\n",
    "index2 = range(30,80)\n",
    "index2_non_missing1 = range(0,30)\n",
    "index2_non_missing2 = range(80,200)\n",
    "\n",
    "index3 = range(140,190)\n",
    "index3_non_missing1 = range(0,140)\n",
    "index3_non_missing2 = range(190,200)\n",
    "\n",
    "index4 = range(50,100)\n",
    "index4_non_missing1 = range(0,50)\n",
    "index4_non_missing2 = range(100,200)\n",
    "\n",
    "indeces_missing = np.transpose(np.reshape(np.concatenate((index1,index2, index3, index4)), \n",
    "                                          (n_tasks, n_missing_values)))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/virginiaaglietti/anaconda3/lib/python3.7/site-packages/matplotlib/patches.py:75: UserWarning: Setting the 'color' property will overridethe edgecolor or facecolor properties.\n",
      "  warnings.warn(\"Setting the 'color' property will override\"\n"
     ]
    },
    {
     "data": {
      "image/png": "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bE477TTat29/ID/WRlPPiEiEXXIJXHkl7N2re9OIxJoTTjiBs88+m7i4OFJTU4PW/fe//01xcTG33HILSUlJ9O7dm4svvphnnnkmrH2lpKQwadIkEhMTOeecc0hOTubLL79s8L6GDRvGaaedRnx8POPHj2fFihUAJCQkUFZWxurVqykvL6dHjx707NkzrBgvvPBCZs+eXZ28PPXUU4wfPz6sz0aSekZEIqiiAv7xDzCDv/wFqn7XlZWBc75ykYNJpHosmkq3bt3CrrthwwY2btxIZo0llCsqKjjppJPC+nxWVlb1BbQArVq1qtUrcaD76tSpU622dvr/yunbty8PP/wwt956K2vWrOG0007jkUceqVU/kOOPP56EhATef/992rZty8aNGznzzDPDOr5IUjIiEkFVv2fS0iDO3+/48MOQlKRkRCQWWJ2TMC0tjV27dlW///7776tfd+vWjT59+tS6piJacTR2X+PGjWPcuHEUFRVx6aWXcvPNN/N///d/QfdZZcKECcycOZPMzExGjhzpyd2DNUwjEkH1LXh23XVw1VX7khMRiR1HHXUUCxYsYPv27WzevJnHHnusetvQoUNJSkri4YcfpqysjIqKClatWsWyZcsavd+OHTuydu3aiOxrzZo1vPXWW+zevZvU1FRSU1Nr9chU6dChA2ZWa78A48eP57nnnmP27NlMmDCh0cfWECF/PZrZ/Wa22syKzWyTmf3dzNoFqX+SmTkzK6nx+DCyYYvEppprjIhI7Lvooovo378/3bt35/TTT+eCCy6o3paQkMArr7zCxx9/TG5uLllZWVx22WUUR2DhoEsuuYSVK1fStm1bRowY0ah97d69mxtvvJGsrCw6derE9u3bueuuu/arl5GRwc0338yQIUPIzMxk6dKlgG8a9IABA0hKSuInP/lJo4+tISzU4idmdg/wLPApkAnMAPY4584NUP8kYJFz7oCHgPLy8lzVD0ekOVqyBAYPhmOOgao/aObPh+3b4fzzW/T9aoIOUOncb17WrFlD//79vQ5DImjChAn07NmzwYuwBflOhDU4HTJhcM7dUuPtFjP7KzA7vPBEWpZAwzTr1sFPf9qikxERiVFr167lxRdfZNWqVZ7F0JBR7FOAT0LUiTezb83sezNbYGYDG7AfkWYnJQWGDIHDD69dBrB7tzcxiYgEcvPNNzNw4EBu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bm4uN910U8TDZ99++20GDx6MmREIBNiwYQND4vjlEBpV0KFDh5i3IeEFAhD60T1qVGK2efvt8MILMHhwYrYn0WmLx4Qf/vCHDB8+nEmTJkW1nkiqtIkzI9HYtm0bp512GldddRX5+fm8//773HnnnWzfvp2lS5cCsGnTJiZPnsy0adO44447yMzM5OOPP+bT0AVJGvHYY48xe/ZsFixYwNy5c5uM4ZFHHuHaa689bFnDdtuJEycCMHPmTB555JFm31MgECAQCLB161bmzJlDjx49uPDCC5tdT6L3wQdQWgq9ekGPHonZ5uTJidmOxKatHRNWrVrF73//e/797383WU6kNWl3ycjFF19c/9g5x+mnn05OTg6zZs1i0aJFFBQUsH79evx+P7/5zW/q25XHjh0bdpt33XUXd911F4sXL+ayyy5rNoYpU6YwYsQIAoEAI0eOZNGiRQwbNowlS5awevVqnnzySQCKiooiek8DBw7kgw8+ALyhu2+88YaGQCfJ6tXefaLOikjqtaVjQnV1NbNmzeK2226jb9++mj9E0ka7a6bZv38/N910E3379iU7O5sOHTpwzTXXEAgE2FI389SQIUPIyMhgypQpvPDCC+zduzfs9mbPns3ChQt56aWXIjrogNeUEpp+2e/3c9FFFzFo0CB27tzJt7/97fp+Hz0i/On97LPPsnbtWp5++mmysrIYN24cO3fujGhdiVwwCL/6lfc40TPqv/suTJoEixYldrvSvLZ0TLj77rvJyMho9kyMSGvT7pKRSy+9lCVLlvCDH/yA119/nXXr1vHAAw8A1P+KOPnkk1mxYgXV1dVMmzaNbt26MWrUKP72t78dtq1gMMizzz7LwIEDOSPCnofOOfx+P36/n7/+9a8MGDCAvLw8/H4/b731FsOGDcPv9xOMYnjlgAEDGDFiBJdccgmrVq1i79693H///RGvL5H585/h44+9ATP/8z+J3fb27V7H2AcfhNraxG5bmtZWjgmbN2/mvvvuY8GCBVRWVlJSUsKBAwfq30dJSUlUxxWRlhRRM42Z+YCFwPeAjsAfgZnOuUZ/HpjZ2cDPgb7AFuCHzrk/JiLgeCpTWVkZK1as4L777uP666+vX75u3bqjyo4bN45x48ZRXV3Nm2++yfz585k4cSI7duygU6dOgDcB26pVqzjrrLM477zz+MMf/kBOM2Mz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\n",
      "text/plain": [
       "<Figure size 648x648 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Figure 1 - Normal prior\n",
    "length=6\n",
    "width=4\n",
    "markersize = 5\n",
    "trans_point = 0.7\n",
    "trans_line = 0.9\n",
    "col_true = 'dimgrey'\n",
    "col_mt = 'red'\n",
    "col_mt_gp = 'green'\n",
    "style_gp = '--'\n",
    "col_st = 'green'\n",
    "style_st = '--'\n",
    "col_pooling = \"darkviolet\"\n",
    "col_dots = 'black'\n",
    "col_icm = 'blue'\n",
    "style_icm = '--'\n",
    "lenght_interval = 2\n",
    "style_arrow = '|-|'\n",
    "style_data = 'o'\n",
    "face_color= 'none'\n",
    "color_interval = 'orange'\n",
    "\n",
    "# font = {'family': 'serif',\n",
    "#         'color':  'black',\n",
    "#         'weight': 'normal',\n",
    "#         'size': 16,\n",
    "#         }\n",
    "\n",
    "font = {'color':  'black',\n",
    "        'weight': 'normal',\n",
    "        'size': 16,\n",
    "        }\n",
    "\n",
    "\n",
    "f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharey = 'row', sharex = True)\n",
    "#f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)\n",
    "# sharex = 'col', sharey = 'row'\n",
    "\n",
    "f.set_figheight(9)\n",
    "f.set_figwidth(9)\n",
    "\n",
    "\n",
    "ax1.plot(original_inputs[indeces_missing[:,0],], outputs[indeces_missing[:,0],0], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax1.plot(original_inputs[index1_non_missing1,], outputs[index1_non_missing1,0], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax1.plot(original_inputs[index1_non_missing2,], outputs[index1_non_missing2,0],style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax1.plot(original_inputs, posterior_mean[:,0], '--', mew=2,linewidth=2.0, color = col_icm)\n",
    "\n",
    "ax1.plot(original_inputs, predictions_MT_Normal[:,0], '--', mew=2, linewidth=2.0, color = col_mt)\n",
    "#ax1.plot(inputs, predictions_MT_GP[:,0], '--', mew=2, linewidth=2.0, color = col_mt_gp)\n",
    "ax1.plot(original_inputs, predictions_ST_Normal[:,0], '--', mew=2, linewidth=2.0, color = col_st)\n",
    "ax1.plot(original_inputs, intensities[:,0], '-', mew=2, color = col_true, markersize=4, alpha=trans_line)\n",
    "\n",
    "ax1.xaxis.set_visible(True)\n",
    "ax1.tick_params(labelsize=11)\n",
    "ax1.spines['top'].set_visible(False)\n",
    "ax1.spines['right'].set_visible(False)\n",
    "\n",
    "a, b = inputs[10], inputs[60]\n",
    "#ax1.set_xticks(())\n",
    "#ax1.set_xticklabels(('',''),color = 'red', visible = True)\n",
    "# ax1.tick_params(axis = \"x\", color = 'red',length=length,width=width)\n",
    "\n",
    "ax1.annotate('', xy=(1.5, 2.3),xytext=(0.3,2.3),                     #draws an arrow from one set of coordinates to the other\n",
    "            arrowprops=dict(arrowstyle=style_arrow,facecolor='red',color='red', linewidth = lenght_interval),   #sets style of arrow and colour\n",
    "            annotation_clip=False)  \n",
    "\n",
    "\n",
    "ax2.plot(original_inputs[indeces_missing[:,1],], outputs[indeces_missing[:,1],1], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "training_points, = ax2.plot(original_inputs[index2_non_missing1,], outputs[index2_non_missing1,1], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax2.plot(original_inputs[index2_non_missing2,], outputs[index2_non_missing2,1], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ICM, = ax2.plot(original_inputs, posterior_mean[:,1], '--', mew=2,linewidth=2.0, color = col_icm)\n",
    "\n",
    "mtLGCP, = ax2.plot(original_inputs, predictions_MT_Normal[:,1], '--', mew=2, linewidth=2.0, color = col_mt)\n",
    "#mtLGCP_GP, = ax2.plot(inputs, predictions_MT_GP[:,1], '--', mew=2, linewidth=2.0, color = col_mt_gp)\n",
    "single_LGCP, = ax2.plot(original_inputs, predictions_ST_Normal[:,1], '--', mew=2, linewidth=2.0, color = col_st)\n",
    "true_intensity, =ax2.plot(original_inputs, intensities[:,1], '-', mew=2, color = col_true, markersize=4, alpha=trans_line)\n",
    "\n",
    "ax2.xaxis.set_visible(True)\n",
    "ax2.tick_params(labelsize=11)\n",
    "ax2.spines['top'].set_visible(False)\n",
    "ax2.spines['right'].set_visible(False)\n",
    "\n",
    "a, b = inputs[30], inputs[80]\n",
    "#ax2.set_xticks(())\n",
    "#ax2.set_xticklabels(('',''),color = 'red', visible = True)\n",
    "#ax2.tick_params(axis = \"x\", color = 'red',length=length,width=width)\n",
    "ax2.annotate('', xy=(2.0, 2.3),xytext=(0.8,2.3),                     #draws an arrow from one set of coordinates to the other\n",
    "            arrowprops=dict(arrowstyle=style_arrow,facecolor='red',color='red', linewidth = lenght_interval),   #sets style of arrow and colour\n",
    "            annotation_clip=False)  \n",
    "\n",
    "\n",
    "\n",
    "ax3.plot(original_inputs[indeces_missing[:,2],], outputs[indeces_missing[:,2],2], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax3.plot(original_inputs[index3_non_missing1,], outputs[index3_non_missing1,2],style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax3.plot(original_inputs[index3_non_missing2,], outputs[index3_non_missing2,2], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax3.plot(original_inputs, posterior_mean[:,2], '--', mew=2,linewidth=2.0, color = col_icm)\n",
    "\n",
    "ax3.plot(original_inputs, predictions_MT_Normal[:,2], '--', mew=2, linewidth=2.0, color = col_mt)\n",
    "#ax3.plot(inputs, predictions_MT_GP[:,2], '--', mew=2, linewidth=2.0, color = col_mt_gp)\n",
    "ax3.plot(original_inputs, predictions_ST_Normal[:,2], '--', mew=2, linewidth=2.0, color = col_st)\n",
    "ax3.plot(original_inputs, intensities[:,2], '-', mew=2, color = col_true, markersize=4, alpha=trans_line)\n",
    "\n",
    "ax3.xaxis.set_visible(True)\n",
    "ax3.tick_params(labelsize=11)\n",
    "ax3.spines['top'].set_visible(False)\n",
    "ax3.spines['right'].set_visible(False)\n",
    "\n",
    "a, b = inputs[140], inputs[190]\n",
    "#ax3.set_xticks(())\n",
    "#ax3.set_xticklabels(('',''),color = 'red', visible = True)\n",
    "#ax3.tick_params(axis = \"x\", color = 'red',length=length,width=width)\n",
    "#ax3.set_yticks((0,30,60))\n",
    "ax3.annotate('', xy=(4.8, 1.2),xytext=(3.6,1.2),                     #draws an arrow from one set of coordinates to the other\n",
    "            arrowprops=dict(arrowstyle=style_arrow,facecolor='red',color='red', linewidth = lenght_interval),   #sets style of arrow and colour\n",
    "            annotation_clip=False)  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "ax4.plot(original_inputs[indeces_missing[:,3],], outputs[indeces_missing[:,3],3], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax4.plot(original_inputs[index4_non_missing1,], outputs[index4_non_missing1,3], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax4.plot(original_inputs[index4_non_missing2,], outputs[index4_non_missing2,3], style_data, mew=2, color = col_dots,  markersize=markersize, alpha=trans_point, markerfacecolor=face_color)\n",
    "ax4.plot(original_inputs, posterior_mean[:,3], '--', mew=2,linewidth=2.0, color = col_icm)\n",
    "\n",
    "ax4.plot(original_inputs, predictions_MT_Normal[:,3], '--', mew=2, linewidth=2.0, color = col_mt)\n",
    "#ax4.plot(inputs, predictions_MT_GP[:,3], '--', mew=2, linewidth=2.0, color = col_mt_gp)\n",
    "ax4.plot(original_inputs, predictions_ST_Normal[:,3], '--', mew=2, linewidth=2.0, color = col_st)\n",
    "ax4.plot(original_inputs, intensities[:,3], '-', mew=2, color = col_true, markersize=4, alpha=trans_line)\n",
    "\n",
    "ax4.xaxis.set_visible(True)\n",
    "ax4.tick_params(labelsize=11)\n",
    "ax4.spines['top'].set_visible(False)\n",
    "ax4.spines['right'].set_visible(False)\n",
    "\n",
    "a, b = inputs[50], inputs[100]\n",
    "#ax4.set_xticks(())\n",
    "#ax4.set_xticklabels(('',''),color = 'red', visible = True)\n",
    "#ax4.tick_params(axis = \"x\", color = 'red',length=length,width=width)\n",
    "ax4.annotate('', xy=(2.5, 1.2),xytext=(1.3,1.2),                     #draws an arrow from one set of coordinates to the other\n",
    "            arrowprops=dict(arrowstyle=style_arrow,facecolor='red',color='red', linewidth = lenght_interval),   #sets style of arrow and colour\n",
    "            annotation_clip=False)  \n",
    "\n",
    "#ax4.annotate('', xy=(-0.92, -4),xytext=(0.08,-4),                     #draws an arrow from one set of coordinates to the other\n",
    "#           arrowprops=dict(arrowstyle=style_arrow,facecolor='red',color='red', linewidth = lenght_interval),   #sets style of arrow and colour\n",
    "#          annotation_clip=False)  \n",
    "#ax4.legend([training_points, true_intensity, mtLGCP,mtLGCP_GP, single_LGCP, ICM], \n",
    "#           ['Training points', 'True intensity', 'LGCPN-Normal','LGCPN-GP', 'LGCP', 'ICM'],prop={'size': 12},\n",
    "#           loc='upper right',fancybox=True, shadow=False, ncol=1)\n",
    "\n",
    "ax4.legend([training_points, true_intensity, mtLGCP,single_LGCP, ICM], \n",
    "           ['Training points', 'True intensity', 'MCPM-Normal','LGCP', 'ICM'],prop={'size': 12},\n",
    "           loc='upper right',fancybox=True, shadow=False, ncol=1)\n",
    "\n",
    "ax1.tick_params(axis='y', labelsize=13)\n",
    "ax3.tick_params(axis='y', labelsize=13)\n",
    "\n",
    "\n",
    "\n",
    "bbox_props = dict(boxstyle=\"round,pad=0.3\", fc=\"white\", ec=\"black\", lw=0.5)\n",
    "\n",
    "\n",
    "plt.text(-5.6, 110,'Task # 1', fontdict=font,bbox=bbox_props )\n",
    "plt.text(0.2, 110, 'Task # 2', fontdict=font,bbox=bbox_props )\n",
    "plt.text(-5.6, 50, 'Task # 3', fontdict=font,bbox=bbox_props )\n",
    "plt.text(0.2, 50, 'Task # 4', fontdict=font,bbox=bbox_props )\n",
    "\n",
    "\n",
    "\n",
    "f.subplots_adjust(hspace=0.07)\n",
    "f.subplots_adjust(wspace=0.03)\n",
    "#f.suptitle('Normal prior', fontsize=14)\n",
    "\n",
    "#f.savefig('synthetic_noise.png')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Compute perf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "RMSE_MT_Normal = np.zeros((n_tasks))\n",
    "RMSE_ST_Normal = np.zeros((n_tasks))\n",
    "RMSE_ICM = np.zeros((n_tasks))\n",
    "RMSE_MT_GP = np.zeros((n_tasks))\n",
    "\n",
    "NLPL_MT_Normal = np.zeros((n_tasks))\n",
    "NLPL_MT_GP = np.zeros((n_tasks))\n",
    "NLPL_ST_Normal = np.zeros((n_tasks))\n",
    "NLPL_ICM = np.zeros((n_tasks))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "for task in xrange(n_tasks):\n",
    "    RMSE_MT_Normal[task] = np.sqrt(np.sum(np.square(outputs_noMissing[indeces_missing[:,task],task] - predictions_MT_Normal[indeces_missing[:,task],task]))/n_missing_values)\n",
    "    RMSE_ST_Normal[task] = np.sqrt(np.sum(np.square(outputs_noMissing[indeces_missing[:,task],task] - predictions_ST_Normal[indeces_missing[:,task],task]))/n_missing_values)\n",
    "    RMSE_ICM[task] = np.sqrt(np.sum(np.square(outputs_noMissing[indeces_missing[:,task],task] - posterior_mean[indeces_missing[:,task],task]))/n_missing_values)\n",
    "    RMSE_MT_GP[task] = np.sqrt(np.sum(np.square(outputs_noMissing[indeces_missing[:,task],task] - predictions_MT_GP[indeces_missing[:,task],task]))/n_missing_values)\n",
    "\n",
    "    \n",
    "    NLPL_MT_Normal[task] = - np.sum(poisson.logpmf(np.around(outputs_noMissing[indeces_missing[:,task],task]),predictions_MT_Normal[indeces_missing[:,task],task]))/n_missing_values\n",
    "    NLPL_ST_Normal[task] = - np.sum(poisson.logpmf(np.around(outputs_noMissing[indeces_missing[:,task],task]),predictions_ST_Normal[indeces_missing[:,task],task]))/n_missing_values\n",
    "\n",
    "    NLPL_ICM[task] = - np.sum(poisson.logpmf(np.around(outputs_noMissing[indeces_missing[:,task],task]),posterior_mean[indeces_missing[:,task],task]))/n_missing_values\n",
    "    NLPL_MT_GP[task] = - np.sum(poisson.logpmf(np.around(outputs_noMissing[indeces_missing[:,task],task]),predictions_MT_GP[indeces_missing[:,task],task]))/n_missing_values\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([17.86133812,  6.78434146,  4.94193268,  5.54924301])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "RMSE_MT_Normal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([17.92180402,  8.52390213,  7.26085376,  5.75760377])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "RMSE_ICM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7.84416355, 3.4713037 , 3.02927179, 3.21089003])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "NLPL_MT_Normal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7.86961306, 3.929407  , 3.58918824, 3.25293771])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "NLPL_ICM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([17.44796131,  6.39437366,  5.05449114,  5.26794648])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "RMSE_MT_GP"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7.53368095, 3.36775309, 3.04949624, 3.12935792])"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "NLPL_MT_GP"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([28.61193695, 32.34253484,  9.14009226,  9.90300674])"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "RMSE_ST_Normal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([24.38660545, 15.00559522,  4.95513638,  5.53967405])"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "NLPL_ST_Normal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Use this if you want to compute nlpl using samples from posterior distributions\n",
    "np.random.seed(1)\n",
    "n_samples = 100\n",
    "intensity_sample = np.zeros((n_samples, N_all, n_tasks))\n",
    "latent_fun_sample = np.zeros((n_samples, N_all, n_latent))\n",
    "weights_sample = np.zeros((n_samples, n_tasks, n_latent))\n",
    "nlpl_fold_task = np.zeros((n_samples, n_tasks))\n",
    "\n",
    "diagonal_variance = np.zeros((n_latent, n_tasks))\n",
    "for q in xrange(n_latent):\n",
    "    diagonal_variance[q] = np.diagonal(vars_w_MT_Normal[q])\n",
    "latent_fun_sample = np.random.normal(latent_means_MT_Normal, np.sqrt(latent_vars_MT_Normal), size = (n_samples, N_all, n_latent)) \n",
    "weights_sample = np.random.normal(means_w_MT_Normal, np.sqrt(diagonal_variance), size = (n_samples, n_latent,n_tasks))\n",
    "\n",
    "for i in xrange(n_samples):\n",
    "    intensity_sample[i] = np.exp(np.transpose(np.dot(np.transpose(weights_sample[i]), np.transpose(latent_fun_sample[i]))) + np.transpose(offsets_MT_Normal))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in xrange(n_samples):\n",
    "    for task in xrange(n_tasks):\n",
    "        true_counts =  np.around(outputs_noMissing[indeces_missing[:,task],task])\n",
    "        pred_counts = intensity_sample[i, :,task][indeces_missing[:,task]]\n",
    "        nlpl_fold_task[i,task] = - np.sum(poisson.logpmf(true_counts, pred_counts))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7.93371568, 3.77618963, 3.1154574 , 3.32578665])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(nlpl_fold_task, axis = 0)/n_missing_values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a1f94f6a0>,\n",
       " <matplotlib.lines.Line2D at 0x1a1f94f7f0>,\n",
       " <matplotlib.lines.Line2D at 0x1a1f94f940>,\n",
       " <matplotlib.lines.Line2D at 0x1a1f94fa90>,\n",
       " <matplotlib.lines.Line2D at 0x1a1f94fbe0>,\n",
       " <matplotlib.lines.Line2D at 0x1a1f94fd30>,\n",
       " <matplotlib.lines.Line2D at 0x1a1f94fe80>,\n",
       " <matplotlib.lines.Line2D at 0x1a1f94ffd0>,\n",
       " <matplotlib.lines.Line2D at 0x1a1f958160>,\n",
       " <matplotlib.lines.Line2D at 0x1a1f9582b0>]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(nelbo_values[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
